﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using BL;
using BE;


namespace UI.Finanzas
{
    public partial class frmPago : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                
                txtTotal.Text = "0";
                cargaInicial();

            }
        }

        void cargaInicial()
        {
            lblFechaPago.Text = DateTime.Now.ToShortDateString();
            llenaCombos();
            llenaPago();
            ddlCuotas.Items.Insert(0, " ");
            ddlCuotas.SelectedIndex = 0;
        }
        void llenaPago()
        {
            DataTable dato = new DataTable();
            Util_BL objUtil = new Util_BL();
            dato.Clear();
            dato = objUtil.DATA_CONCEPTO_PAGO_ListaMonto(Convert.ToInt32(ddlConcepto.SelectedValue));
            txtTotal.Text = dato.Rows[0]["Monto"].ToString();
            


            
        }

        void llenaCombos()
        {

            DataTable dato = new DataTable();
            Util_BL objUtil = new Util_BL();
            dato.Clear();
            dato = objUtil.DATA_CONCEPTO_Listar(0);
            ddlConcepto.DataSource = dato;
            ddlConcepto.DataTextField = "Descripcion";
            ddlConcepto.DataValueField = "Id_Concepto";
            ddlConcepto.DataBind();
          
            dato.Clear();
            dato = objUtil.TIPO_INGRESO_Listar();
            ddlTipoIngreso.DataSource = dato;
            ddlTipoIngreso.DataTextField = "Descripcion";
            ddlTipoIngreso.DataValueField = "Id_Tipo_Ingreso";
            ddlTipoIngreso.DataBind();

            dato.Clear();
            dato = objUtil.DATA_PERIODO_Listar("TODOS");
            ddlPeriodo.DataSource = dato;
            ddlPeriodo.DataTextField = "Semestre";
            ddlPeriodo.DataValueField = "Id_Periodo";
            ddlPeriodo.DataBind();

            for (int x = 0; x <= dato.Rows.Count; x++)
            {
                if (dato.Rows[x]["activo"].ToString() == "1")
                {
                    ddlPeriodo.SelectedValue = dato.Rows[x]["Id_Periodo"].ToString();
                        break;
                }
            }


        }

        protected void ddlCuotas_SelectedIndexChanged(object sender, EventArgs e)
        {




            //se debe ingresar 
            try
            {
                if (Convert.ToBoolean(Convert.ToDecimal(txtTotal.Text)))
                {
                    if (txtTotal.Text == "0")
                    {
                        lblMensaje.Text = "Monto no debe ser 0";
                        return;
                        
                    }

                  
                }
            }
            catch (Exception ex)
            {
                lblMensaje.Text = "Ingrese Monto Válido";
                return;
             
            }
            
            //

            DataTable dato = new DataTable();
            if (grvDetallePago.Rows.Count == 0)
            {
                
                dato = detallePago(Convert.ToDecimal(txtTotal.Text));
                grvDetallePago.DataSource = dato;
                grvDetallePago.DataBind();
            }

            else
            {
                
                dato = detallePagoRecalculo();
                grvDetallePago.DataSource = dato;
                grvDetallePago.DataBind();
            }


            btnGrabar.Focus();
            habilita(1);
        }


        void  habilita(int x)
        {
            if (x == 1)
            {
                btnGrabar.Enabled = true;
                btnRecalcular.Enabled = true;

            }

        }

        private DataTable detallePago(decimal total)
        {
            DataTable reporte = new DataTable();
            DataRow fila;
            int y = Convert.ToInt32(ddlCuotas.SelectedValue);

            reporte.Columns.Add("Item");
            reporte.Columns.Add("Concepto");
            reporte.Columns.Add("Monto");
            reporte.Columns.Add("Deuda");
            reporte.Columns.Add("FechaPago");

            decimal TotalDeuda = Convert.ToDecimal(total);
            decimal DeudaCuotas = TotalDeuda / y;
            decimal DeudaCuotasR = decimal.Round(DeudaCuotas, 2);
            for (int x = 1; x <= y; x++)
            {

                fila = reporte.NewRow();
                fila[0] = x;
                fila[1] = ddlConcepto.SelectedItem.Text;
                fila[2] = DeudaCuotasR;
                fila[3] = "";
                fila[4] = DateTime.Now;

                reporte.Rows.Add(fila);
               

            }

            return reporte;

        }

       

        protected void btnRecalcular_Click(object sender, EventArgs e)
        {
            DataTable dato = new DataTable();
            dato = detallePagoRecalculo();
            grvDetallePago.DataSource = dato;
            grvDetallePago.DataBind();
        }

        private DataTable detallePagoRecalculo()
        {
            DataTable reporte = new DataTable();
            DataRow fila;
            int y = Convert.ToInt32(ddlCuotas.SelectedValue);

            reporte.Columns.Add("Item");
            reporte.Columns.Add("Concepto");
            reporte.Columns.Add("Monto");
            reporte.Columns.Add("Deuda");
            reporte.Columns.Add("FechaPago");

            decimal TotalDeuda = Convert.ToDecimal(txtTotal.Text);
            decimal DeudaCuotas = 0;
            
           // se hace un foreach para capturar el valor que va abonar el usuario
            String cantidadAbonado = "";
            foreach (GridViewRow objItem in grvDetallePago.Rows)
            {

                TextBox cantidadAbonar = ((TextBox)objItem.Cells[0].FindControl("txtMonto"));
                cantidadAbonado = cantidadAbonar.Text;
                break;

            }

            if (ddlCuotas.SelectedValue == "1")
            {
                cantidadAbonado = txtTotal.Text;
            }

            TotalDeuda = TotalDeuda - Convert.ToDecimal(cantidadAbonado);
            decimal DeudaCuotasR = 0;
            if (y == 1)
            {
                 DeudaCuotasR = decimal.Round((TotalDeuda / y ),2);
            }

            else

            {
                 DeudaCuotasR = decimal.Round((TotalDeuda /( y - 1)),2);
            }
            

            for (int x = 1; x <= y; x++)
            {
                if (x == 1)
                {
                    fila = reporte.NewRow();
                    fila[0] = x;
                    fila[1] = ddlConcepto.SelectedItem.Text;
                    fila[2] = cantidadAbonado;
                    fila[3] = "";
                    fila[4] = DateTime.Now;
                    
                }

                else
                {
                    fila = reporte.NewRow();
                    fila[0] = x;
                    fila[1] = ddlConcepto.SelectedItem.Text;
                    fila[2] = DeudaCuotasR;
                    fila[3] = "";
                    fila[4] = DateTime.Now;                  

                }

                reporte.Rows.Add(fila);
            }

            return reporte;

        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            
            lblNombre.Text = "";
            txtCodigoAlumno.Text = "";
            ddlCuotas.SelectedIndex = 0;
            DataTable dato = new DataTable();

            grvDetallePago.DataSource = dato;
            grvDetallePago.DataBind();
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {

            if (txtCodigoAlumno.Text.Length == 0)
            {
                string script = @"alert('Ingrese Cod de Alumno');";
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Confirmación", script, true);
                return;

            }

            if (validaUsuario()==false) // valida si existe el usuario
            {

                string script = @"alert('Usario no Existe');";
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Confirmación", script, true);
                return;
            }




            try
            {
                //datos de cabecera
                Pago_BE objPago = new Pago_BE();
                objPago.Id_Concepto = Convert.ToInt32(ddlConcepto.SelectedValue);
                objPago.Cod_Alumno = txtCodigoAlumno.Text;
                objPago.TotalPago = Convert.ToDecimal(txtTotal.Text);
                objPago.Id_Tipo_Ingreso = Convert.ToInt32(ddlTipoIngreso.SelectedValue);
                objPago.Periodo = ddlPeriodo.SelectedItem.Text;
                objPago.Usuario_Registra = User.Identity.Name;
                objPago.Fecha_Registro = DateTime.Now;
                objPago.Id_Estado = Convert.ToInt32(ddlEstado.SelectedValue);
                objPago.Observacion = txtObservacion.Text.Trim();


                //

                //se recorre la grilla y se obtiene el valor de los montos y se crea una matriz

                DataTable dato = new DataTable();
                DataRow fila;
                int y = Convert.ToInt32(ddlCuotas.SelectedValue);

                dato.Columns.Add("Item");
                dato.Columns.Add("Concepto");
                dato.Columns.Add("Monto");
                dato.Columns.Add("Deuda");
                dato.Columns.Add("FechaPago");
                dato.Columns.Add("Observacion");

                decimal total = Convert.ToDecimal(txtTotal.Text);
                foreach (GridViewRow row in grvDetallePago.Rows)
                {
                    fila = dato.NewRow();
                    TextBox MontoPago = ((TextBox)row.Cells[0].FindControl("txtMonto"));
                    TextBox Observacion = ((TextBox)row.Cells[0].FindControl("txtObservacionDetalle"));
                    decimal pago = Convert.ToDecimal(MontoPago.Text);
                    total = total - pago;
                    fila[0] = grvDetallePago.DataKeys[row.RowIndex].Values["Item"].ToString();
                    fila[1] = ddlConcepto.SelectedValue;
                    fila[2] = pago.ToString();
                    fila[3] = total;
                    fila[4] = grvDetallePago.DataKeys[row.RowIndex].Values["FechaPago"].ToString();
                    fila[5] = Observacion.Text.Trim();


                    dato.Rows.Add(fila);

                    if (total == 0)
                    {
                        break;
                    }


                }

                dato.AcceptChanges();


                //se graba la cabecera y el detalle
                Pago_BL obj = new Pago_BL();
                int x = obj.DATA_PAGO_Insert(objPago, dato);
                lblCodigoPago.Text = string.Format("{0:0000}", x);



                string script = @"alert('Pago Grabado satisfactoriamente');";
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Confirmación", script, true);
                
            }

            catch (Exception ex)

            {
                string script = @"alert('Ocurrio un error al grabar,intentelo denuevo!');";
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Confirmación", script, true);
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("frmPagoConsulta.aspx");
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            ModalPopupExtender1.Hide();
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            // Lista el Modal segun el tipo de concepto de pago a realizar.
            if(ddlConcepto.SelectedValue=="1")
            {
                llenaAlumnosPreMatricula();
            }
            
           
        }

        void llenaAlumnosPreMatricula()
        {            
            // llena los alumnos que estan para pagar pre matricula

            PreMatricula_BL obj = new PreMatricula_BL();
            DataTable dato = new DataTable();
            Int32 Id_Pre = 0;
            if (txtMatricula.Text.Length == 0)
            {
                Id_Pre = 0;
            }
            else
            {
                Id_Pre = Convert.ToInt32(txtMatricula.Text);
            }

            dato = obj.DATA_PREMATRICULA_ListaPorId(Id_Pre);

            grvModalGrid.DataSource = dato;
            grvModalGrid.DataBind();
        }

        void BuscarPorID()
        {
            PreMatricula_BL obj = new PreMatricula_BL();
            DataTable dato = new DataTable();
            Int32 Id_Pre = 0;
            if (txtMatricula.Text.Length == 0)
            {
                Id_Pre = 0;
            }
            else
            {
                Id_Pre = Convert.ToInt32(txtMatricula.Text);
            }

            dato = obj.DATA_PREMATRICULA_ListaPorId(Id_Pre);
            if (dato.Rows.Count == 0)
            {
                ClientScript.RegisterStartupScript(this.GetType(), "Mensaje", "alert('No existe el código Registrado');", true);
                return;
            }
            else
            {
                
            }
        }

        protected void grvModalGrid_SelectedIndexChanged(object sender, EventArgs e)
        {

            txtCodigoAlumno.Text = grvModalGrid.SelectedRow.Cells[1].Text;
            lblNombre.Text ="Nombres:" + grvModalGrid.SelectedRow.Cells[2].Text;
            ModalPopupExtender1.Hide();

        }

        protected void Button2_Click(object sender, EventArgs e)
        {


           
        }

        private Boolean validaUsuario()
        {
            PreMatricula_BL obj = new PreMatricula_BL();
            DataTable dato = new DataTable();
            Int32 Id_Pre = 0;
            if (txtCodigoAlumno.Text.Length == 0)
            {
                Id_Pre = 0;
            }
            else
            {
                Id_Pre = Convert.ToInt32(txtCodigoAlumno.Text);
            }

            dato = obj.DATA_PREMATRICULA_ListaPorId(Id_Pre);
            if (dato.Rows.Count == 0)
            {
                return false;
                //ClientScript.RegisterStartupScript(this.GetType(), "Mensaje", "alert('No existe el código Registrado');", true);
                //return;
            }
            else
            {
                lblNombre.Text = dato.Rows[0]["nombres"].ToString();
                btnGrabar.Enabled = true;
                btnCancelar.Enabled = true;

                return true;
            }


            
        }

        protected void btnBuscarAlumno_Click(object sender, EventArgs e)
        {
            ModalPopupExtender1.Show();
        }
    }
}